<?php
/**
 * Created by PhpStorm.
 * User: zhongbaitong
 * Date: 2020/1/9
 * Time: 11:53
 */

namespace app\user\model;

use think\Model;

class User extends Model
{
    protected $autoWriteTimestamp = "datetime";

    // 新用户登录处理
    public static function firstLogin($params){
        // 最近登录ip
        $params["last_ip"] = get_client_ip();
        // 获取唯一别名
        $params["alias"] = self::getAlias();
        // 授权
        if($params["is_authorize"]){
            // 存储微信 头像/昵称 到服务器
            $params["username"] = $params["nickname"];
            $params["head_image"] = self::saveToLocal($params["avatar"]);
        }
        return self::create($params);
    }

    // 旧用户登录处理
    public static function againLogin($params){
        $openid = $params["openid"];
        $user = self::get(compact('openid'));
        // 最新登录 ip
        $params["last_ip"] = get_client_ip();

        // 用户第一次授权
        if( $params["is_authorize"] && !$user->is_authorize ){
            // 存储微信 头像/昵称 到服务器
            $params["username"] = $params["nickname"];
            $params["head_image"] = self::saveToLocal($params["avatar"]);
        }
        // 这里关闭不更新的信息
        unset($params["invite_uid"],$params["invite_count"]);

        $user->allowField(true)->save($params,compact("openid"));

        return $user;
    }

    // 图片保存到服务器
    public static function saveToLocal($avatar)
    {
        // 定义路径信息
        $show_dir = '/upload/avatar/' . date('Y/m/d/');
        $root_dir = ROOT_PATH . "public" . $show_dir;
        $name = uniqid() . ".jpg";

        !is_dir($root_dir) && @mkdir(iconv("UTF-8", "GBK", $root_dir)
            , 0777, true);

        // 保存
        $avatar = $avatar ?: request()->domain() . "/static/nopic.png";
        $images = file_get_contents($avatar);
        file_put_contents($root_dir . $name, $images);

        return $show_dir . $name;
    }

    // 生成唯一别名
    public static function getAlias($length = 6)
    {
        $letter = chr(rand(65, 90));
        $alias = $letter . random($length, 1);
        if (User::get(compact('alias'))) {
            $alias = self::getAlias($length);
        }
        return $alias;
    }
}